package jk.fox.invocation;

import jk.fox.node.client.RpcCluster;
import jk.fox.common.payload.container.RpcContainer;
import jk.fox.engine.RpcNodeDefinition;

import java.lang.reflect.Method;

/**
 * @author cuichao
 * @Description: Invocation
 * @Date: create in 2020/5/16 23:22
 */
public interface Invocation {
     /**
      * 远程调用
      * @param key
      * @param method
      * @param parameterTypes
      * @param parameters
      * @return
      * @throws Exception
      */
     Object remote(String key, String method, String[] parameterTypes, Object[] parameters) throws Exception;
     /**
      * 本地调用
      * @param key
      * @param method
      * @param parameters
      * @return
      * @throws Exception
      */
     Object local(String key, Method method, Object[] parameters) throws Exception;
     /**
      * 构建代理对象
      * @param definition
      * @return
      */
     Object proxy(RpcNodeDefinition definition);
     /**
      * 返回容器
      * @return
      */
     RpcContainer container();
     /**
      * 返回集群执行器
      * @return
      */
     RpcCluster cluster();
     /**
      * 设置集群执行器
      * @param rpcCluster
      */
     void cluster(RpcCluster rpcCluster);
}
